
#ifndef WRITER_BASE_H
#define WRITER_BASE_H

#include <string>
#include "datakit.h"

namespace  AMCAX::Exchange 
{
    class WriterBase
    {
    public:
        virtual Dtk_ErrorStatus WriteInit(Dtk_string DumpFile, const Dtk_string& inOutputFolder);
        virtual Dtk_ErrorStatus WriteInit(Dtk_string DumpFile, const Dtk_string& inOutputFolder, int Option);
        virtual Dtk_ErrorStatus WriteEnd();
        virtual void InitComponent(Dtk_ComponentPtr inComponent);
        virtual void EndComponent(Dtk_ComponentPtr inComponent);
        virtual Dtk_ErrorStatus CreateAssembly(Dtk_ComponentPtr inComponent, Dtk_ID& outAssemblyId);
        virtual Dtk_ErrorStatus CloseAssembly(const Dtk_ComponentPtr& inComponent);
        virtual Dtk_ErrorStatus CreateInstance(Dtk_ID inAssemblyId, Dtk_ID inPrototypeId, Dtk_transfoPtr matrix, Dtk_ID& outIdInst);
        virtual void InitNode(Dtk_NodePtr inNode);
        virtual void EndNode();
        virtual void WriteMesh(Dtk_MeshPtr& inMeshToWrite, Dtk_tab<Dtk_ID>& outIds);
        virtual void WriteKinematics(const Dtk_KinematicPtr& inKinematics);
        virtual void WriteConstraint(const Dtk_ConstraintPtr& inConstraint);
        virtual void WriteAxisSystem(const Dtk_AxisSystemPtr& inAxis);
        virtual void WriteDrawing(const Dtk_DrawingPtr& inDrawing);
        virtual void WriteCamera(const Dtk_CameraPtr& inCamera);
        virtual void WriteFdt(const Dtk_FdtPtr& inFdt);
        virtual void WriteFeature(const Dtk_FeaturePtr& inFeature);
        virtual void WriteBody(Dtk_BodyPtr& inBody, Dtk_tab<Dtk_ID>& outIds);
        virtual void WriteGlobalDataSet(const Dtk_GlobalDataSetPtr& inSelectionSet);
        virtual void WriteMetaData(const Dtk_MetaDataPtr& inMetaData);
        virtual void WriteColorPalette(const Dtk_ColorInfosSetPtr &inColorInfos);
        virtual void WriteLayerFilter(const Dtk_LayerInfosSetPtr& inLayerInfos);

        static const wchar_t *GetWStringFromDtkString(const Dtk_string& inString);
    };
}

#endif